\section{Desarrollo}

Para este trabajo no s'olo hubo que desarrollar dos familias infinitas de tri'angulos de area conocida, sino tambi'en los m'etodos de c'alculo de 'area de un tri'angulo en base a la longitud de sus lados y, para evaluar distintos grados de error, implementar una biblioteca de n'umeros de punto flotante de precisi'on arbitraria. 

\subsection{Familias infinitas de tri'angulos}
\subsubsection{Tri'angulos de 'area conocida}
\label{desa_triangulo_conocido}
Se eligi'o una familia cuya 'area fuera facilmente calculable y diera poco margen de error. Se opt'o por los tri'angulos rect'angulos de base $x$ y altura $2x$, de manera tal que el 'area de todos los tri'angulos fuera $x^2$, pues se facilita obtener la longitud de la tercera arista mediante la f'ormula de Pit'agoras
\begin{displaymath}
h = \sqrt{base^2 + altura^2}
\end{displaymath}
\subsubsection{Tri'angulos cuya 'area tiende a 0}
\label{desa_triangulo_tiende_cero}
Nuevamente, la familia infinita de tri'angulos $\{T_n\}_{n=1}^\infty$ tales que $\displaystyle \lim _{n\to \infty} A = 0$ deb'ia ser sencilla de calcular para evitar acarrear demasiado error. Por esto se opt'o por los tri'angulos rect'angulos que tuvieran $base = \frac{1}{x}$ y $altura = \frac{2}{n}$, donde $x \neq 0$. De esta manera, el 'area de cada tri'angulo ser'a $base^2$, y dado que la base es $\frac{1}{x} \Rightarrow \displaystyle \lim _{n \to \infty} \frac{1}{x} = 0$. 

La longitud de la tercera arista se obtiene con el mismo m'etodo de Pit'agoras visto en \ref{desa_triangulo_conocido}.
\subsection{C'alculo de Error Relativo}
La f'ormula anal'itica para el c'alculo del error relativo de una f'ormula $f(x)$ es
\begin{displaymath}
\epsilon _{f(x)} = \frac{\delta f}{\delta x}x \epsilon _x + \epsilon _{operaciones}
\end{displaymath}
Sin embargo, debido a la complejidad de las f'ormulas y al desconocimiento del error acarreado por las operaciones, se decidi'o utilizar el m'etodo emp'irico de c'alculo de error, a saber
\begin{displaymath}
\frac{|F - f|}{|f|}
\end{displaymath}
donde $F$ es el valor real que devuelve la funci'on $f$ y $f$ es el resultado de utilizar implementaciones de punto flotante con precisi'on finita.

\subsection{Punto Flotante de Precisi'on Arbitraria}
\label{desa_IEEE}
Para la implementaci'on de la biblioteca de punto flotante de precisi'on arbitraria se opt'o por utilizar una cota m'axima para el n'umero de bits de la mantisa. De esta manera se pudo implementar la biblioteca sobre uno de los registros de punto flotante definidos por el est'andar IEEE 754, utilizando una m'ascara de bits para acotar la mantisa por la precisi'on establecida y truncando lo que sobresaliera de dicha precisi'on.

Se consider'o utilizar un registro de 32 bits, pero esto dejaba muy poco lugar a la arbitrariedad de la precisi'on. Se opt'o entonces por un registro de 64 bits, estableciendo asì una precisi'on m'axima de 52 (ver \ref{intro_IEEE}).

En cuanto al redondeo o truncamiento, se hab'ia considerado en un primer momento la opci'on de redondeo, aprovechando que el registro interno a la biblioteca se maneja de esa forma. Sin embargo se opt'o por el truncamiento porque los c'alculos sobre bits necesarios para el redondeo hac'ian demasiado costosa cada operaci'on.

La m'ascara se confecciona utilizando la siguiente f'ormula binario-l'ogica
\begin{displaymath}
\neg(2^{52-t} - 1)
\end{displaymath}
donde $t$ es la precisi'on solicitada -acotada por 52-.

Si por ejemplo tenemos una precisi'on de 20 bits, la m'ascara ser'a 
\begin{displaymath}
\neg(2^{32} - 1) = \neg(0000000000000000000011111111111111111111111111111111) = 
\end{displaymath}
\begin{displaymath}
1111111111111111111100000000000000000000000000000000
\end{displaymath}
Al hacer un $and$ l'ogico con el n'umero que se quiera representar, s'olo quedar'an los primeros 20 bits significativos\footnote{El orden de los bits es puramente demostrativo al ejemplo. Asumiendo que los operadores de bit de C++ funcionen de la misma manera que los de C, el compilador se encarga de definir si el procesador maneja \texttt{big-endian} o \texttt{little-endian}}, dejando el resto en 0. De esta manera se da la precisi'on deseaada al n'umero en cuesti'on y se lo trunca.
